package mybatis.interfaces;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.util.*;

/**
 * 使用 and 连接的 <> 操作
 *
 * @author CKC
 */
public interface INotEqualsQueryCondition extends Serializable {

    /**
     * 不相等,相同字段and,不同字段and，eg: neq[type]=user&neq[type]=userGroup&neq[name]=name 表示 (type <> 'userGroup' and type <> 'user') and name <> 'name1'
     * 备注：为了与SwaggerUI结合，产生Swagger文档
     *
     * @return null
     */
    @ApiModelProperty(name = "neq[?]", value = "不相等,相同字段and,不同字段and，eg: neq[type]=user&neq[type]=userGroup&neq[name]=name 表示 (type <> 'userGroup' and type <> 'user') and name <> 'name1' ")
    @JsonIgnore
    default String getNeqSwaggerView() {
        return null;
    }

    /**
     * getNeq
     *
     * @return map
     */
    Map<String, List<String>> getNeq();


    /**
     * setNeq
     *
     * @param neq
     */
    void setNeq(Map<String, List<String>> neq);

    /**
     * getNeqByType
     */
    @ApiModelProperty(hidden = true)
    @JsonIgnore
    default List<String> getNeq(String field) {
        if (getNeq() != null) {
            return getNeq().get(field);
        } else {
            return null;
        }
    }

    /**
     * addNeq
     */
    default void addNeq(String field, String... values) {
        if (getNeq() == null) {
            setNeq(new HashMap<>(8));
        }
        if (getNeq().get(field) == null) {
            getNeq().put(field, new ArrayList<>(Arrays.asList(values)));
        } else {
            getNeq().get(field).addAll(Arrays.asList(values));
        }
    }

    /**
     * setNeq(null)
     *
     * @see #getNeqSwaggerView
     */
    default void clearNeq() {
        setNeq(null);
    }

    /**
     * removeByField
     *
     * @param field
     * @see #getNeqSwaggerView
     */
    default void clearTypeNeq(String field) {
        if (getNeq() == null) {
            return;
        }
        getNeq().remove(field);
    }

    /**
     * isEmptyNeq
     *
     * @return
     */
    @ApiModelProperty(hidden = true)
    @JsonIgnore
    default boolean isEmptyNeq() {
        return getNeq() == null || getNeq().isEmpty();
    }
}
